import java.util.Scanner;

import events.*;
import events.event.*;


public class Main {

  /**
   * @param args
   */
  public static void main(String[] args) {
    
    // Utwórz obiekt dyspozytora zdarzeń (EventDispatcher)
    EventDispatcher eventDispatcher = new EventDispatcher();
    
    // Utwórz obiekt wyświetlający tekst i zgłoś go w dyspozytorze zdarzeń
    IEventListener textDisplay = new TextDisplay();
    eventDispatcher.addEventListener(textDisplay);
 
    // Utwórz obiekt zliczający znaki i zgłoś go w dyspozytorze zdarzeń
    IEventListener charactersCounter = new CharactersCounter();
    eventDispatcher.addEventListener(charactersCounter);
    
    /* W pętli odczytuj z klawiatury tekst.
     * Po każdym słowie rozsyłaj zdarzenie KeyboardEvent, przekazując w obiekcie KeyboardEvent wprowadzony tekst.
     */   
    // Utwórz strumień wejściowy z klawiatury
    Scanner input = new Scanner(System.in);
    while (input.hasNext()) {
      // Pobierz tekst z bufora
      String text = input.nextLine();

      // Jeśli text=="--exit" zakończ pętlę.
      if (text.equals("--exit")) {
        System.out.println("break @ while");
        break;
      }
      
      // Jeśli text=="--count-off" przestań zliczać znaki (tu chodzi o przetestowanie metody removeEventListener())
      if (text.equals("--count-off")) {
        eventDispatcher.removeEventListener(charactersCounter); // usuwa obiekt charactersCounter z listy dyspozytora zdarzeń 
        System.out.println("eventDispatcher.removeEventListener(charactersCounter);");
        continue; // wróć do początku pętli
      }
      
      // Jeśli text=="--count-on" rozpocznij zliczać znaki (-||-)
      if (text.equals("--count-on")) {
        eventDispatcher.addEventListener(charactersCounter); // dodaje obiekt charactersCounter do listy dyspozytora zdarzeń
        System.out.println("eventDispatcher.addEventListener(charactersCounter);");
        continue; // wróć do początku pętli
      }
            
      // Roześlij zdarzenie KeyboardEvent, przekazując słowo wprowadzone z klawiatury
      eventDispatcher.dispatchEvent(new KeyboardEvent(text));
    }
  }
  
}
